package com.gitee.sop.layui.adminserver.module.background.admin.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.gitee.sop.layui.adminserver.module.background.admin.entity.SysApplication;

import java.util.List;
import java.util.Map;

/**
 * com.gitee.sop.adminserver.modules.background.admin.entity.SysApplication模型业务接口
 *
 * @author: admin
 * @date: 2020-04-24
 * @version: 1.0.0
 */
public interface SysApplicationService extends IService<SysApplication> {

    /**
     * 获取指定用户的所有应用信息
     *
     * @param userUuid 用户uuid
     * @return
     */
    List<SysApplication> getRelationListByUserUuid(String userUuid);


    /**
     * 获取当前登录用户的应用信息列表
     *
     * @return
     */
    List<Map<String, Object>> getChildListForCurrentApplication();

    /**
     * 获取当前用户创建信息
     *
     * @return
     */
    List<SysApplication> getListByCurrentUserCreated();

    /**
     * 新增应用
     *
     * @param sysApplication 应用信息
     * @param parentAppId    上级应用id ，可为空，默认去当前应用id
     * @param templateAppId  模板应用id，当该id不为空时，则复用该模板应用信息新
     */
    SysApplication add(SysApplication sysApplication, String parentAppId, String templateAppId);

    /**
     * 应用权限赋值
     *
     * @param userUuid 用户uuid
     * @param appId    应用id
     */
    void assign(String userUuid, String appId);

    /**
     * 获取指定应用指定用户的应用
     *
     * @param appId 应用id
     * @param uuid  创建用户
     * @return
     */
    SysApplication getOneByAppIdAndCreatorUuid(String appId, String uuid);

    /**
     * 为指定对象封装，app名称信息
     *
     * @param map 待封装对象
     * @return
     */
    Map<String, Object> wrapAppName(Map<String, Object> map);

    /**
     * 为指定对象封装，app名称信息
     *
     * @param mapList 待封装对象
     * @return
     */
    List<Map<String, Object>> wrapAppName(List<Map<String, Object>> mapList);

    /**
     * 获取指定应用
     *
     * @param appId
     * @return
     */
    SysApplication getOneByAppId(String appId);

    /**
     * 取消用于与应用的关联关系
     *
     * @param userUuid 用户uuid
     * @param appId    应用id
     */
    void cancel(String userUuid, String appId);
}